home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / UTILITY / CMDED2E6.ARJ / CMDCFG.C < prev    next >
C/C++ Source or Header  |  1992-06-30  |  3KB  |  143 lines

  1. /*
  2.  * cmdcfg.c -- a simple keymap configuration utility for cmdedit.com
  3.  *
  4.  * Version 1.0
  5.  *
  6.  * Author:  Wayne Davison (davison@borland.com)
  7.  *
  8.  * Compiler used: Borland C
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <fcntl.h>
  14. #include <io.h>
  15.  
  16. #define BUF_SIZE (32 * 1024)
  17.  
  18. char search_text[] = "CMDEDIT key map";
  19.  
  20. void print_char(int ch, char *str);
  21.  
  22. int
  23. main(int argc, char *argv[])
  24. {
  25.     int fn;
  26.     char *buf, *cp;
  27.     unsigned size, left;
  28.     struct ftime ft;
  29.  
  30.     if (argc != 2) {
  31.     fprintf(stderr, "Usage: cmdcfg <filename>\n");
  32.     exit(1);
  33.     }
  34.     if ((fn = open(argv[1], O_RDWR | O_BINARY)) == -1) {
  35.     fprintf(stderr, "Unable to open %s.\n", argv[1]);
  36.     exit(1);
  37.     }
  38.     getftime(fn, &ft);
  39.     if ((buf = malloc(BUF_SIZE)) == NULL) {
  40.     fprintf(stderr, "Out of memory.\n");
  41.     exit(1);
  42.     }
  43.     size = read(fn, buf, BUF_SIZE);
  44.  
  45.     for (cp = buf, left = size; left; cp++, left--) {
  46.     if (*cp == *search_text && !strcmp(cp, search_text)) {
  47.         int i;
  48.         int ch;
  49.         short *sp;
  50.         int changed = 0;
  51.  
  52.         cp += sizeof search_text;
  53.         sp = (short *)cp;
  54.         printf("Press <space> or the key that should be generated for the listed key.\n");
  55.         for (i = 0; i < 32; i++) {
  56.         print_char(i, " (");
  57.         print_char(*sp, "): ");
  58.         ch = getch();
  59.                 if (ch == '\0')
  60.                     ch = getch() + 256;
  61.                 if (ch == 256 + 3)
  62.                     ch = 0;
  63.         if (ch != ' ' && *sp != ch) {
  64.             *sp = ch;
  65.             changed = 1;
  66.         }
  67.         print_char(*sp++, "\n");
  68.         }
  69.         if (changed) {
  70.         lseek(fn, 0L, 0);
  71.         write(fn, buf, size);
  72.         }
  73.         break;
  74.     }
  75.     }
  76.     setftime(fn, &ft);
  77.     close(fn);
  78.     if (!left) {
  79.     fprintf(stderr, "Couldn't find key map table.\n");
  80.     exit(1);
  81.     }
  82.     return 0;
  83. }
  84.  
  85. void
  86. print_char(int ch, char *str)
  87. {
  88.     if (ch < 32) {
  89.     putchar('^');
  90.     putchar(ch + '@');
  91.         if (ch == 9)
  92.             fputs("/Tab", stdout);
  93.         else if (ch == 13)
  94.             fputs("/Enter", stdout);
  95.         else if (ch == 27)
  96.             fputs("/Esc", stdout);
  97.     }
  98.     else if (ch == 127) {
  99.         putchar('^');
  100.         putchar('?');
  101.     }
  102.     else if (ch > 127) {
  103.         switch (ch) {
  104.         case 327:
  105.             fputs("Home", stdout);
  106.             break;
  107.         case 328:
  108.             fputs("Up", stdout);
  109.             break;
  110.         case 331:
  111.             fputs("Left", stdout);
  112.             break;
  113.         case 333:
  114.             fputs("Right", stdout);
  115.             break;
  116.         case 335:
  117.             fputs("End", stdout);
  118.             break;
  119.         case 336:
  120.             fputs("Down", stdout);
  121.             break;
  122.         case 338:
  123.             fputs("Ins", stdout);
  124.             break;
  125.         case 339:
  126.             fputs("Del", stdout);
  127.             break;
  128.         case 371:
  129.             fputs("^Left", stdout);
  130.             break;
  131.         case 372:
  132.             fputs("^Right", stdout);
  133.             break;
  134.         default:
  135.             printf("?%d?", ch);
  136.             break;
  137.         }
  138.     }
  139.     else
  140.     putchar(ch);
  141.     fputs(str, stdout);
  142. }
  143.